/**
 * 头像工具函数
 * 用于处理头像数据的解析和格式化
 * 
 * @author Wu.Liang
 * @date 2025-01-30
 * @version 1.0.0
 */

/**
 * 解析头像数据，支持JSON格式和URL字符串格式
 * @param {string|object} avatarData - 头像数据，可能是JSON字符串或URL字符串
 * @returns {object|null} 解析后的头像信息对象，如果解析失败返回null
 */
export function parseAvatarData(avatarData) {
  if (!avatarData) {
    return null
  }
  
  // 如果已经是对象，直接返回
  if (typeof avatarData === 'object') {
    return avatarData
  }
  
  // 如果是字符串，尝试解析JSON
  if (typeof avatarData === 'string') {
    // 如果看起来像URL，返回URL格式的对象
    if (avatarData.startsWith('http://') || avatarData.startsWith('https://') || avatarData.startsWith('/')) {
      return {
        fileUrl: avatarData,
        fileName: 'avatar',
        fileType: 'image/jpeg',
        status: 'success'
      }
    }
    
    // 尝试解析JSON
    try {
      const parsed = JSON.parse(avatarData)
      return parsed
    } catch (error) {
      return null
    }
  }
  
  return null
}

/**
 * 获取头像URL
 * @param {string|object} avatarData - 头像数据
 * @returns {string} 头像URL，如果获取失败返回默认头像
 */
export function getAvatarUrl(avatarData, defaultAvatar = '/static/images/default-avatar.png') {
  const avatarInfo = parseAvatarData(avatarData)
  
  if (!avatarInfo) {
    return defaultAvatar
  }
  
  // 优先使用fileUrl字段（数据库中的标准字段）
  if (avatarInfo.fileUrl) {
    return avatarInfo.fileUrl
  }
  
  // 如果没有fileUrl，尝试其他可能的字段
  if (avatarInfo.url) {
    return avatarInfo.url
  }
  
  // 如果都没有，返回默认头像
  return defaultAvatar
}

/**
 * 获取头像文件名
 * @param {string|object} avatarData - 头像数据
 * @returns {string} 头像文件名
 */
export function getAvatarFileName(avatarData) {
  const avatarInfo = parseAvatarData(avatarData)
  
  if (!avatarInfo) {
    return 'avatar'
  }
  
  return avatarInfo.fileName || avatarInfo.originalFileName || 'avatar'
}

/**
 * 获取头像文件大小
 * @param {string|object} avatarData - 头像数据
 * @returns {number} 头像文件大小（字节）
 */
export function getAvatarFileSize(avatarData) {
  const avatarInfo = parseAvatarData(avatarData)
  
  if (!avatarInfo) {
    return 0
  }
  
  return avatarInfo.fileSize || 0
}

/**
 * 获取头像文件类型
 * @param {string|object} avatarData - 头像数据
 * @returns {string} 头像文件类型
 */
export function getAvatarFileType(avatarData) {
  const avatarInfo = parseAvatarData(avatarData)
  
  if (!avatarInfo) {
    return 'image/jpeg'
  }
  
  return avatarInfo.fileType || 'image/jpeg'
}

/**
 * 检查头像是否有效
 * @param {string|object} avatarData - 头像数据
 * @returns {boolean} 头像是否有效
 */
export function isAvatarValid(avatarData) {
  const avatarInfo = parseAvatarData(avatarData)
  
  if (!avatarInfo) {
    return false
  }
  
  // 检查是否有有效的URL
  const hasValidUrl = avatarInfo.fileUrl || avatarInfo.url
  
  // 检查状态是否为success
  const hasValidStatus = !avatarInfo.status || avatarInfo.status === 'success'
  
  return hasValidUrl && hasValidStatus
}

/**
 * 格式化头像信息用于显示
 * @param {string|object} avatarData - 头像数据
 * @returns {object} 格式化后的头像信息
 */
export function formatAvatarForDisplay(avatarData) {
  const avatarInfo = parseAvatarData(avatarData)
  
  if (!avatarInfo) {
    return {
      url: '/static/images/default-avatar.png',
      fileName: '默认头像',
      fileSize: 0,
      fileType: 'image/jpeg',
      isValid: false
    }
  }
  
  return {
    url: avatarInfo.fileUrl || avatarInfo.url || '/static/images/default-avatar.png',
    fileName: avatarInfo.fileName || avatarInfo.originalFileName || '头像',
    fileSize: avatarInfo.fileSize || 0,
    fileType: avatarInfo.fileType || 'image/jpeg',
    isValid: isAvatarValid(avatarData),
    uploadTime: avatarInfo.createTime,
    uploadType: avatarInfo.uploadType,
    uploadSource: avatarInfo.uploadSource
  }
}
